iT邦幫忙

2023 iThome 鐵人賽

DAY 17
0

昨天大略介紹了 UserDefault 以及使用方式,那想在 SwiftUI 裡使用 UserDefault 還需要一個特殊的東西,就是今天要介紹的 @AppStorage。

@AppStorage

@AppStorage 正確來說是用來存取 UserDefault 裡某個特定的值,並且會在值變化時通知畫面去做更新。有點像是 UserDefault 跟 @State 的結合,但是相比 UserDefault 它能儲存的類型比較少,目前只有 Bool、String、Data、Int、Double、URL 這六種而已。

而 @AppStorage 的使用方法就像下圖那樣在括號中放入你要使用的 Key,後面設定好他的預設值。

而 @AppStorage 他的投射屬性是 Binding 的,所以是可以利用 @AppStorage 將某些元件的值跟 UserDefault 綁定在一起的。

到這裡可以了解,在 SwiftUI 中,想對 UserDefault 的值進行操作主要都是透過 @AppStorage 進行。

@SceneStorage

介紹完 @AppStorage,再來多介紹一個跟它很像的 Property Wrapper,@SceneStorage。

@SceneStorage 跟 @AppStorage 雖然很像,但它們還是有很大的不同。

首先,@AppStroage 的底層是 UserDefault,它的用途主要是用來存取整個 App 都會使用到的資料,而 @SceneStorage 的底層不是,它的底層是一個未公開的 API,而且 @SceneStorage 的功能雖然也是存取資料,但它存取的資料只會用於狀態回復。

再來就是 @SceneStorage 內存取的資料會在 Scene 被關閉時清除,換句說法就是 @AppStorage 內存取的資料在你關閉 App 之後依舊會存在底層的 UserDefault 裡,而 @SceneStorage 裡的資料在關閉 App 時是會跟著一起被清除的。

最後也是我覺得比較重要的一點就是 @SceneStorage 最好不要用來存取一些敏感資料,因為它其實不是很安全,這點在使用時要格外注意。

那今天就介紹到這裡,明天介紹什麼好呢?


上一篇
Day 16:資料持久化(1)
下一篇
Day 18:NavigationBar
系列文
SwiftUI學習之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言